
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.Common;
using Microsoft.Practices.EnterpriseLibrary.Data.Sql;
using Microsoft.Practices.EnterpriseLibrary.Common;
using System.Configuration;
using Insifo.BE.Gen;
using Insifo.BE;

namespace Insifo.DL.Gen
{


    public class DLImpuesto : DLTransaction, IDLTransaccion<BEImpuesto>
    {


        #region Members


        /// <summary>
        /// Método Inserta un GEN_Impuesto 
        /// </summary>
        /// <returns>Devuelve una entidad</returns>

        public BEImpuesto Insertar(BEImpuesto pbe)
        {
            BEImpuesto be = new BEImpuesto();
            SqlDatabase sqlDB = new SqlDatabase(CadenaConexion.Obtener());
            DbCommand dbCmd = sqlDB.GetStoredProcCommand("uSP_INSIFO_GEN_Impuesto_Insertar");

            try
            {
                dbCmd.CommandTimeout = CadenaConexion.CommandTimeout;
                dbCmd.Transaction = Transaction.InnerDbTransaction; //Para administrar la transaccion
                dbCmd.Connection = Transaction.Connection;  //Para administrar la conecion de la transaccion
                sqlDB.AddInParameter(dbCmd, "@as_CodigoImpuesto", DbType.String, pbe.CodigoImpuesto);
                sqlDB.AddInParameter(dbCmd, "@as_Descripcion", DbType.String, pbe.Descripcion);
                sqlDB.AddInParameter(dbCmd, "@a_Tasa", DbType.Decimal, pbe.Tasa);
                sqlDB.AddInParameter(dbCmd, "@as_Periodicidad", DbType.String, pbe.Periodicidad);
                sqlDB.AddInParameter(dbCmd, "@as_Estado", DbType.String, pbe.Estado);
                sqlDB.AddInParameter(dbCmd, "@as_UsuarioCreacion", DbType.String, pbe.UsuarioCreacion);

                using (IDataReader reader = sqlDB.ExecuteReader(dbCmd, dbCmd.Transaction))
                {
                    while (reader.Read())
                    {
                        be.Id = DBValue.Get<int>(reader, "Id");
                        be.FechaCreacion = DBValue.Get<DateTime>(reader, "FechaCreacion");
                        //Error
                        be.Error = DBValue.Get<Int32>(reader, "CodigoError");
                        be.Mensaje = DBValue.Get<String>(reader, "MensajeError");
                        break;
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                dbCmd.Dispose();
            }
            return be;
        }
        /// <summary>
        /// Método Actualiza un GEN_Impuesto 
        /// </summary>
        /// <returns>Devuelve una entidad</returns>

        public BEImpuesto Actualizar(BEImpuesto pbe)
        {
            BEImpuesto be = new BEImpuesto();
            SqlDatabase sqlDB = new SqlDatabase(CadenaConexion.Obtener());
            DbCommand dbCmd = sqlDB.GetStoredProcCommand("uSP_INSIFO_GEN_Impuesto_Actualizar");

            try
            {
                dbCmd.CommandTimeout = CadenaConexion.CommandTimeout;
                dbCmd.Transaction = Transaction.InnerDbTransaction; //Para administrar la transaccion
                dbCmd.Connection = Transaction.Connection;  //Para administrar la conecion de la transaccion

                sqlDB.AddInParameter(dbCmd, "@ai_IdImpuesto", DbType.Int32, pbe.IdImpuesto);
                sqlDB.AddInParameter(dbCmd, "@as_CodigoImpuesto", DbType.String, pbe.CodigoImpuesto);
                sqlDB.AddInParameter(dbCmd, "@as_Descripcion", DbType.String, pbe.Descripcion);
                sqlDB.AddInParameter(dbCmd, "@a_Tasa", DbType.Decimal, pbe.Tasa);
                sqlDB.AddInParameter(dbCmd, "@as_Periodicidad", DbType.String, pbe.Periodicidad);
                sqlDB.AddInParameter(dbCmd, "@as_Estado", DbType.String, pbe.Estado);
                sqlDB.AddInParameter(dbCmd, "@as_UsuarioModificacion", DbType.String, pbe.UsuarioModificacion);

                using (IDataReader reader = sqlDB.ExecuteReader(dbCmd, dbCmd.Transaction))
                {
                    while (reader.Read())
                    {
                        be.Id = DBValue.Get<int>(reader, "Id");
                        be.FechaModificacion = DBValue.Get<DateTime>(reader, "FechaModificacion");
                        //Error
                        be.Error = DBValue.Get<Int32>(reader, "CodigoError");
                        be.Mensaje = DBValue.Get<String>(reader, "MensajeError");
                        break;
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                dbCmd.Dispose();
            }
            return be;
        }

        ///<summary>
        /// Método Actualiza el GEN_Impuesto 
        ///</summary>
        ///<returns>Devuelve una entidad</returns> 

        public BEImpuesto Eliminar(BEImpuesto pbe)
        {
            BEImpuesto be = new BEImpuesto();
            SqlDatabase sqlDB = new SqlDatabase(CadenaConexion.Obtener());
            DbCommand dbCmd = sqlDB.GetStoredProcCommand("uSP_INSIFO_GEN_Impuesto_Eliminar");

            try
            {
                dbCmd.CommandTimeout = CadenaConexion.CommandTimeout;
                sqlDB.AddInParameter(dbCmd, "@ai_IdImpuesto", DbType.Int32, pbe.IdImpuesto);
                sqlDB.AddInParameter(dbCmd, "@as_UsuarioModificacion", DbType.String, pbe.UsuarioModificacion);

                using (IDataReader reader = sqlDB.ExecuteReader(dbCmd))
                {
                    while (reader.Read())
                    {
                        be.Id = DBValue.Get<int>(reader, "Id");
                        //Error
                        be.Error = DBValue.Get<Int32>(reader, "CodigoError");
                        be.Mensaje = DBValue.Get<String>(reader, "MensajeError");
                        break;
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                dbCmd.Dispose();
            }
            return be;
        }

        ///<summary>
        /// Método Lista datos de la tabla GEN_Impuesto 
        ///</summary>
        ///<returns>Devuelve una Objeto Dataset</returns> 

        public DataSet Listar(BEImpuesto pbe)
        {
            DataSet ds = new DataSet();
            SqlDatabase sqlDB = new SqlDatabase(CadenaConexion.Obtener());
            DbCommand dbCmd = sqlDB.GetStoredProcCommand("uSP_INSIFO_GEN_Impuesto_Listar");
            try
            {
                dbCmd.CommandTimeout = CadenaConexion.CommandTimeout;
                sqlDB.AddInParameter(dbCmd, "@as_CodigoImpuesto", DbType.String, pbe.CodigoImpuesto);
                sqlDB.AddInParameter(dbCmd, "@as_Descripcion", DbType.String, pbe.Descripcion);
                sqlDB.AddInParameter(dbCmd, "@as_Estado", DbType.String, pbe.Estado);
                sqlDB.AddInParameter(dbCmd, "@ai_Pagina", DbType.Int32, pbe.Pagina);

                ds = sqlDB.ExecuteDataSet(dbCmd);
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                dbCmd.Dispose();
            }
            return ds;

        }

       


        public DataSet ListarPorAplicacion(BEImpuestoAplicacion pbe)
        {
            DataSet ds = new DataSet();
            SqlDatabase sqlDB = new SqlDatabase(CadenaConexion.Obtener());
            DbCommand dbCmd = sqlDB.GetStoredProcCommand("uSP_GEN_ImpuestoPorAplicacion_Listar");
            try
            {
                dbCmd.CommandTimeout = CadenaConexion.CommandTimeout;

                sqlDB.AddInParameter(dbCmd, "@ai_IdAplicacion", DbType.Int32, pbe.IdAplicacion);
                ds = sqlDB.ExecuteDataSet(dbCmd);
            }
            catch (Exception e)
            {
                throw e;
            }
            finally
            {
                dbCmd.Dispose();
            }
            return ds;
        }

        ///<summary>
        /// Método obtiene dato de la tabla GEN_Impuesto 
        ///</summary>
        ///<returns>Devuelve una Objeto  </returns> 

        public BEImpuesto Obtener(BEImpuesto pbe)
        {
            BEImpuesto be = new BEImpuesto();
            SqlDatabase sqlDB = new SqlDatabase(CadenaConexion.Obtener());
            DbCommand dbCmd = sqlDB.GetStoredProcCommand("uSP_INSIFO_GEN_Impuesto_Obtener");
            dbCmd.CommandTimeout = CadenaConexion.CommandTimeout;
            try
            {

                sqlDB.AddInParameter(dbCmd, "@ai_IdImpuesto", DbType.Int32, pbe.IdImpuesto);

                using (IDataReader reader = sqlDB.ExecuteReader(dbCmd))
                {
                    while (reader.Read())
                    {

                        be.IdImpuesto = DBValue.Get<Int32>(reader, "IdImpuesto");
                        be.CodigoImpuesto = DBValue.Get<String>(reader, "CodigoImpuesto");
                        be.Descripcion = DBValue.Get<String>(reader, "Descripcion");
                        be.Tasa = DBValue.Get<Decimal>(reader, "Tasa");
                        be.Periodicidad = DBValue.Get<String>(reader, "Periodicidad");
                        be.Estado = DBValue.Get<String>(reader, "Estado");
                        be.UsuarioCreacion = DBValue.Get<String>(reader, "UsuarioCreacion");
                        be.FechaCreacion = DBValue.Get<DateTime>(reader, "FechaCreacion");
                        be.UsuarioModificacion = DBValue.Get<String>(reader, "UsuarioModificacion");
                        be.FechaModificacion = DBValue.Get<DateTime>(reader, "FechaModificacion");

                    }
                }

            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                dbCmd.Dispose();
            }
            return be;

        }



        public BEIdGeneralAplicacion InsertarAplicacion(BEIdGeneralAplicacion pbe)
        {
            BEIdGeneralAplicacion be = new BEIdGeneralAplicacion();
            SqlDatabase sqlDB = new SqlDatabase(CadenaConexion.Obtener());
            DbCommand dbCmd = sqlDB.GetStoredProcCommand("uSP_INSIFO_GEN_ImpuestoAplicacion_Insertar");

            try
            {
                dbCmd.CommandTimeout = CadenaConexion.CommandTimeout;
                dbCmd.Transaction = Transaction.InnerDbTransaction; //Para administrar la transaccion
                dbCmd.Connection = Transaction.Connection;  //Para administrar la conecion de la transaccion

                sqlDB.AddInParameter(dbCmd, "@ai_IdImpuesto", DbType.Int32, pbe.IdGenerico);
                sqlDB.AddInParameter(dbCmd, "@ai_IdAplicacion", DbType.Int32, pbe.IdAplicacion);
                sqlDB.AddInParameter(dbCmd, "@as_Estado", DbType.String, pbe.Estado);

                using (IDataReader reader = sqlDB.ExecuteReader(dbCmd, dbCmd.Transaction))
                {
                    while (reader.Read())
                    {
                        be.IdGenerico = DBValue.Get<Int32>(reader, "IdImpuesto");
                        be.IdAplicacion = DBValue.Get<Int32>(reader, "IdAplicacion");
                        be.FechaCreacion = DBValue.Get<DateTime>(reader, "FechaCreacion");
                        //Error
                        be.Error = DBValue.Get<Int32>(reader, "CodigoError");
                        be.Mensaje = DBValue.Get<String>(reader, "MensajeError");

                        break;
                    }
                }
            }
            catch (Exception e)
            {
                throw e;
            }

            finally
            {
                dbCmd.Dispose();
            }
            return be;
        }
        #endregion

    }
}